﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
////           整理思路，我要做一个猜数字游戏，
//           1.首先要随机生成数字，每次生成的数字不同
//           2.其次要做一个“猜循环”即不断输出数字，判断是否与随机数的大小，并给出提示
//           3.选择，继续玩或者是结束游戏
///////////                第一步     生成随机数        考虑到srand函数和rand函数               /////////////

//c语言中提供了一个可以生成随机数的函数，函数的原型    int rand (viod),包含头文件 <stdlib.h>
//c语言中又提供了一个函数叫srand，用来初始化随机数的生成器的，srand的原型：   void srand（unsigned int seed）


//int main()
//{
//	//srand
//	printf("%d\n",rand());
//	printf("%d\n",rand());
//	printf("%d\n",rand());
//	printf("%d\n",rand());
//	printf("%d\n",rand());
//	return 0;
//}
//输出结果：
//   41
//   18467
//   6334
//   26500
//   19169
//       加入“srand”生成种子，根据时间戳
//!!!!!!!  如果按压速度很快，数值会很接近，如果足够快，则有可能生成相同的“随机数”，——伪随机数

//int main()
//{
//	while (1)
//	{
//		srand((unsigned int)time(NULL));
//		printf("%d\n", rand());
//		printf("%d\n", rand());
//		
//
//
//	}
//	return 0;
//}
//4928
//17786
//15173
//29997
//29585








//         疑难解答之随机数-------------为什么循环内和循环外不同！！！！！！！！！！！！！！！！关键在于 起始状态
//在C语言中，这个现象的原因要从 srand 和 rand 函数的工作原理说起。
//srand 函数
//srand 函数用于设置随机数生成器的起始点，也就是种子（seed）。它的原型是 void srand(unsigned int seed); 。
//rand 函数
//rand 函数用于生成伪随机数，它会根据 srand 设置的种子，按照特定的算法生成一个介于0到 RAND_MAX （一个很大的整数，通常是32767 ）之间的整数。其原型是 int rand(void); 。
//为何不能频繁调用 srand 且种子不变
//如果在短时间内频繁调用 srand 且每次传入的种子值相同，那么每次调用 rand 时，由于随机数生成器的起始状态相同，按照同样的算法生成的随机数序列必然也是相同的。
//
//例如，第一次调用 srand(1) 后，调用 rand 生成的随机数序列是 a1, a2, a3... ；第二次再次调用 srand(1)  ，后续调用 rand 生成的随机数序列依然会是 a1, a2, a3... 。这是因为随机数生成器的初始状态被重置为相同的情况，算法的起点一样，生成的序列自然也一样。
//正确的做法
//通常建议在程序开始时，只调用一次 srand ，并且使用一个随时间变化的值作为种子，比如当前时间。像这样：
//

//int main() 
//{
//	// 使用当前时间作为种子
//	srand((unsigned int)time(NULL));
//
//	// 生成并打印一些随机数
//	for (int i = 0; i < 10; i++) 
// {
//		int random_num = rand();
//		printf("%d\n", random_num);
//	}
//
//	return 0;
// }
//
//通过 time(NULL) 获取当前时间作为种子，由于每次运行程序的时间不同，种子不同，随机数生成器的！！！起始状态！！！不同，这样就能得到不同的随机数序列，保证了随机性。
//
//总结来说，关键在于合理设置随机数种子，避免在短时间内用相同种子多次初始化随机数生成器，以确保生成的随机数序列具有足够的随机性。


//   依次增大的死循环

//int main()
//{
//	while (1)
//	{
//		srand((unsigned int)time(NULL));
//		printf("%d\n", rand());
//		
//	}
//	return 0;
//}




//hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
//int main()
//{
//	srand((unsigned int)time(NULL));
//	printf("!!!!!!!!!!!!!!!!!!!!!!!!!\n");
//    printf("***     1. play       ***\n");
//	printf("***     0. exit       ***\n");
//	printf("*************************\n");
//	printf("请选择》");
//	int input = 0;
//	scanf("%d", &input);
//	switch (input)
//	{
//	default:
//		printf("输入错误,请重新输入\n");
//		break;
//			
//	case 0:
//		printf("游戏结束，退出游戏\n");
//		break;
//	case 1:
//	{
//		int r = rand() % 100 + 1;
//		int guess = 0;
//		while (1)
//		{
//			printf("请猜一个数字\n");
//			scanf("%d", &guess);
//			if (guess > r)
//			{
//				printf("猜大了\n");
//			}
//			else if (guess < r)
//			{
//				printf("猜小了\n");
//			}
//			else
//			{
//				printf("恭喜你，猜对了，数字是%d\n", r);
//
//				break;
//			}
//		}
//
//	}
//	
//	}
//
//		return 0;
//}



int main()
{

	srand((unsigned int)time(NULL));
	printf("!!!!!!!!!!!!!!!!!!!!!!!!!\n");
	printf("***     1. play       ***\n");
	printf("***     0. exit       ***\n");
	printf("*************************\n");
	flag:
	printf("请选择》");
	int input = 0;
	scanf("%d", &input);
	switch (input)
	{
	default:
		printf("输入错误,请重新输入\n");
		goto  flag;

	case 0:
		printf("游戏结束，退出游戏\n");
		break;
	case 1:
	{
		int r = rand() % 100 + 1;
		int guess = 0;
		int count = 5;
		while (count)
		{
			printf("请猜一个数字\n");
			printf("你还有%d次机会\n", count);
			scanf("%d", &guess);
			{
				if (guess > r)
				{
					printf("猜大了\n");
				}
				else if (guess < r)
				{
					printf("猜小了\n");
				}
				else
				{
					printf("恭喜你，猜对了，数字是%d\n", r);

					break;
				}
			}
			count--;
		}
		if (count == 0)
		{
			printf("5次机会使用完毕，游戏失败\n");
			printf("正确的数字是：%d\n,r");
		}
	}

	}

	return 0;
}